package bancosys.tec.services.implementor.descriptor;

import jmine.tec.di.scope.TypedScope;

/**
 * Define o que deve ser feito com o objeto devolvido pelo metodo de execucao
 * 
 * @author takeshi
 */
public interface OutputNameExtractor {

    /**
     * Devolve o nome da variavel que a execucao de um metodo deve ter, se algum. O objeto devolvido por
     * {@link ServiceExecutionProxy#hydrateAndExecute(Object, TypedScope)} deve ser disponibilizado no escopo com o nome passado.
     * 
     * @param scope o escopo
     * @return {@link String}
     */
    String getOutputName(TypedScope scope);

    /**
     * Devolve o nome da coluna cujo valor será usado
     * 
     * @return {@link String}
     */
    String getColumnName();

    /**
     * Se true, o objeto deve ser colocado literalmente no {@link TypedScope}
     * 
     * @return boolean
     */
    boolean isLiteral();
}
